/**
 * 登录规则
 * @param {Object} rule - 验证规则对象，包含验证的具体规则（不常用）
 * @param {string} value - 用户输入的值，即用户名
 * @param {Function} callback - 验证完成后需要调用的回调函数。callback() 表示验证通过，callback(new Error()) 表示验证失败
 */
const validateName = (rule, value, callback) => {
    if (!value) {
        return callback(new Error("用户名不能为空"));// 如果为空，则返回错误信息
    } else if (value.length < 3) {
        return callback(new Error("用户名少于3个字符")); // 如果用户名少于3个字符，提示错误信息
    } else if (value.length > 20) {
        return callback(new Error("用户名超过20字符")); // 如果用户名超过 20 字符，提示错误信息
    } else {
        callback(); // 如果不为空，继续后续验证
    }
};


export const validatePassword = (rule, value, callback) => {
    if (value === "") {
        callback(new Error("密码不能为空"));// 如果为空，则返回错误信息
    } else if (value.length < 3) {
        return callback(new Error("密码少于3个字符")); // 如果密码少于3个字符，提示错误信息
    } else if (value.length > 20) {
        return callback(new Error("密码超过20字符")); // 如果密码超过 20 字符，提示错误信息
    } else {
        callback();// 如果不为空，继续后续验证
    }
};

// 验证邮箱的规则
export const validateEmail = (rule, value, callback) => {
    // 正则表达式，用于验证邮箱格式
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if (!value) {
        return callback(new Error("邮箱不能为空")); // 如果为空，则返回错误信息
    } else if (!emailRegex.test(value)) {
        return callback(new Error("请输入正确的邮箱地址")); // 如果格式不正确，返回错误信息
    } else {
        callback(); // 如果不为空且格式正确，继续后续验证
    }
};

// 定义登录表单的验证规则
export const SignInRules = {
    username: [{validator: validateName, trigger: "blur"}],// trigger: "blur"当字段失去焦点时触发验证
    password: [{validator: validatePassword, trigger: "blur"}],// trigger: "blur"当字段失去焦点时触发验证
    email: [{ validator: validateEmail, trigger: "blur" }], // 添加邮箱的验证规则，失去焦点时触发
};

// 注册规则
export const SignUpRules = {
    username: [{validator: validateName,required: true, trigger: "blur"}],
    password: [{validator: validatePassword,required: true, trigger: "blur"}],

    // 性别字段的验证规则
    sex: [
        {
            required: true, // 该字段为必填项
            message: "请选择性别", // 验证失败时的提示信息
            trigger: "change" // 当字段值改变时触发验证
        }
    ],
    phoneNum: [{message: "请输入手机号码", trigger: "blur"}],
    email: [
        {message: "请输入邮箱地址",required: true, trigger: "blur"},
        {
            type: "email",
            message: "请输入正确的邮箱地址",
            trigger: ["blur", "change"],
        },
    ],
    birth: [{required: true, type: "date", message: "请选择日期", trigger: "change"}],
    introduction: [{message: "请输入介绍", trigger: "blur"}],
    location: [{message: "请输入地区", trigger: "change"}],
};
